home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / unixSyscall / RCS / compatSig.c,v < prev    next >
Text File  |  1990-06-26  |  10KB  |  490 lines

  1. head     1.8;
  2. branch   ;
  3. access   ;
  4. symbols  ;
  5. locks    ; strict;
  6. comment  @ * @;
  7.  
  8.  
  9. 1.8
  10. date     90.06.26.18.41.03;  author douglis;  state Exp;
  11. branches ;
  12. next     1.7;
  13.  
  14. 1.7
  15. date     89.09.12.11.43.34;  author nelson;  state Exp;
  16. branches ;
  17. next     1.6;
  18.  
  19. 1.6
  20. date     89.04.12.18.21.57;  author douglis;  state Exp;
  21. branches ;
  22. next     1.5;
  23.  
  24. 1.5
  25. date     88.10.21.17.57.05;  author ouster;  state Exp;
  26. branches ;
  27. next     1.4;
  28.  
  29. 1.4
  30. date     88.08.16.19.08.58;  author mendel;  state Exp;
  31. branches ;
  32. next     1.3;
  33.  
  34. 1.3
  35. date     88.07.29.17.39.14;  author ouster;  state Exp;
  36. branches ;
  37. next     1.2;
  38.  
  39. 1.2
  40. date     88.06.21.17.24.49;  author ouster;  state Exp;
  41. branches ;
  42. next     1.1;
  43.  
  44. 1.1
  45. date     88.06.19.14.31.12;  author ouster;  state Exp;
  46. branches ;
  47. next     ;
  48.  
  49.  
  50. desc
  51. @@
  52.  
  53.  
  54. 1.8
  55. log
  56. @accept signal number 32 with a NULL mapping, rather than returning errors.
  57. @
  58. text
  59. @/*
  60.  * compatSig.c --
  61.  *
  62.  *     Returns the Sprite signal number corresponding to a Unix signal.
  63.  *
  64.  * Copyright (C) 1986 Regents of the University of California
  65.  * All rights reserved.
  66.  *
  67.  */
  68.  
  69. #ifndef lint
  70. static char rcsid[] = "$Header: /sprite/src/lib/c/unixSyscall/RCS/compatSig.c,v 1.7 89/09/12 11:43:34 nelson Exp Locker: douglis $ SPRITE (Berkeley)";
  71. #endif not lint
  72.  
  73. #include "sprite.h"
  74.  
  75. #ifndef NULL
  76. #define NULL 0
  77. #endif
  78.  
  79. #include "compatInt.h"
  80. #include <sig.h>
  81. #include <signal.h>
  82.  
  83. #include "compatSig.h"
  84.  
  85.  
  86. /*
  87.  *----------------------------------------------------------------------
  88.  *
  89.  * Compat_UnixSignalToSprite --
  90.  *
  91.  *    Given a Unix signal, return the closest corresponding Sprite signal
  92.  *    number. Signal 0 is special-cased to map to sprite signal 0 (NULL).
  93.  *    Some programs use kill(pid, 0) to see if pid exists....
  94.  *
  95.  * Results:
  96.  *    A Sprite signal number is returned, assuming the Unix signal is
  97.  *    in a valid range.  Note that the Sprite "signal number" may be
  98.  *    NULL (0) if there's no matching signal.
  99.  *
  100.  * Side effects:
  101.  *    None.
  102.  *
  103.  *----------------------------------------------------------------------
  104.  */
  105.  
  106. ReturnStatus
  107. Compat_UnixSignalToSprite(signal, spriteSigPtr)
  108.     int signal;
  109.     int *spriteSigPtr;
  110. {
  111.     if (signal >= 0 && signal <= NSIG) {
  112.     *spriteSigPtr = compat_UnixSigToSprite[signal];
  113.     return(SUCCESS);
  114.     } else {
  115.     return(FAILURE);
  116.     }
  117. }
  118.  
  119.  
  120. /*
  121.  *----------------------------------------------------------------------
  122.  *
  123.  * Compat_SpriteSignalToUnix --
  124.  *
  125.  *    Given a Sprite signal, return the closest corresponding Unix signal
  126.  *    number.
  127.  *
  128.  * Results:
  129.  *    A Unix signal number is returned, assuming the Sprite signal is
  130.  *    in a valid range. 
  131.  *
  132.  * Side effects:
  133.  *    None.
  134.  *
  135.  *----------------------------------------------------------------------
  136.  */
  137. ReturnStatus
  138. Compat_SpriteSignalToUnix(signal, unixSigPtr)
  139.     int signal;
  140.     int *unixSigPtr;
  141. {
  142.     if (signal >= 0 && signal <= SIG_NUM_SIGNALS) {
  143.     *unixSigPtr = spriteToUnix[signal];
  144.     return(SUCCESS);
  145.     } else {
  146.     return(FAILURE);
  147.     }
  148. }
  149.  
  150.  
  151. /*
  152.  *----------------------------------------------------------------------
  153.  *
  154.  *  Compat_UnixSigMaskToSprite --
  155.  *
  156.  *    Given a Unix signal mask, return the corresponding Sprite signal
  157.  *    mask.
  158.  *
  159.  * Results:
  160.  *    A Sprite signal mask is returned, assuming the Unix signal mask is
  161.  *    valid.
  162.  *
  163.  * Side effects:
  164.  *    None.
  165.  *
  166.  *----------------------------------------------------------------------
  167.  */
  168.  
  169. ReturnStatus
  170. Compat_UnixSigMaskToSprite(unixMask, spriteMaskPtr)
  171.     int unixMask;
  172.     int *spriteMaskPtr;
  173. {
  174.     int i;
  175.     int signal;
  176.     ReturnStatus status;
  177.  
  178.     *spriteMaskPtr = 0;
  179.     for (i = 1; i < NSIG; i++) {
  180.     if (unixMask & (1 << (i - 1))) {
  181.         status = Compat_UnixSignalToSprite(i, &signal);
  182.         if (status == FAILURE) {
  183.         return(FAILURE);
  184.         }
  185.         if (signal != NULL) {
  186.         *spriteMaskPtr |= 1 << (signal - 1);
  187.         }
  188.     }
  189.     }
  190. #ifdef COMPAT_DEBUG
  191.     Io_Print("Unix mask = <%x> Sprite mask = <%x>\n", 
  192.         unixMask, *spriteMaskPtr);
  193. #endif
  194.     return(SUCCESS);
  195. }
  196.  
  197.  
  198. /*
  199.  *----------------------------------------------------------------------
  200.  *
  201.  * Compat_SpriteSigMaskToUnix --
  202.  *
  203.  *    Given a Sprite signal mask, return the corresponding Unix signal
  204.  *    mask.
  205.  *
  206.  * Results:
  207.  *    A Unix signal mask is returned, assuming the Sprite signal mask is
  208.  *    valid.
  209.  *
  210.  * Side effects:
  211.  *    None.
  212.  *
  213.  *----------------------------------------------------------------------
  214.  */
  215.  
  216. ReturnStatus
  217. Compat_SpriteSigMaskToUnix(SpriteMask, UnixMaskPtr)
  218.     int SpriteMask;
  219.     int *UnixMaskPtr;
  220. {
  221.     int i;
  222.     int signal;
  223.     ReturnStatus status;
  224.  
  225.     *UnixMaskPtr = 0;
  226.     for (i = 1; i <= SIG_NUM_SIGNALS; i++) {
  227.     if (SpriteMask & (1 << (i - 1))) {
  228.         status = Compat_SpriteSignalToUnix(i, &signal);
  229.         if (status == FAILURE) {
  230.         return(FAILURE);
  231.         }
  232.         if (signal != NULL) {
  233.         *UnixMaskPtr |= 1 << (signal - 1);
  234.         }
  235.     }
  236.     }
  237.     return(SUCCESS);
  238. }
  239.  
  240.  
  241. /*
  242.  *----------------------------------------------------------------------
  243.  *
  244.  * Compat_GetSigHoldMask --
  245.  *
  246.  *    Return the current signal mask.
  247.  *
  248.  * Results:
  249.  *    The current signal mask (in Sprite terms) is returned.
  250.  *
  251.  * Side effects:
  252.  *    None.
  253.  *
  254.  *----------------------------------------------------------------------
  255.  */
  256.  
  257. #define MASK_ALL_SIGNALS 0xFFFFFFFF
  258.  
  259. ReturnStatus
  260. Compat_GetSigHoldMask(maskPtr)
  261.     int *maskPtr;
  262. {
  263.     ReturnStatus status;
  264.  
  265.     /*
  266.      * To modify the hold mask we need to get the old one by
  267.      * calling Sig_SetHoldMask to get the current mask.  Since we
  268.      * don't know what to set the mask to, set the mask to mask ALL 
  269.      * signals and then reset it again to the proper value.
  270.      */
  271.  
  272.     status = Sig_SetHoldMask((int) MASK_ALL_SIGNALS, maskPtr);
  273.     if (status != SUCCESS) {
  274.     return(status);
  275.     }
  276.     status = Sig_SetHoldMask(*maskPtr, (int *) NULL);
  277.     return(status);
  278. }
  279. @
  280.  
  281.  
  282. 1.7
  283. log
  284. @changes for the ultrix compatibility port (ci by FD)
  285. @
  286. text
  287. @d12 1
  288. a12 1
  289. static char rcsid[] = "$Header: /sprite/src/lib/c/unixSyscall/RCS/compatSig.c,v 1.6 89/04/12 18:21:57 douglis Exp Locker: nelson $ SPRITE (Berkeley)";
  290. d53 1
  291. a53 1
  292.     if (signal >= 0 && signal <= numSignals) {
  293. d84 1
  294. a84 1
  295.     if (signal >= 0 && signal <= numSignals) {
  296. d121 1
  297. a121 1
  298.     for (i = 1; i <= NSIG; i++) {
  299. @
  300.  
  301.  
  302. 1.6
  303. log
  304. @map SIGTTOU to SIG_TTY_OUTPUT.
  305. @
  306. text
  307. @d12 1
  308. a12 1
  309. static char rcsid[] = "$Header: /sprite/src/lib/c/unixSyscall/RCS/compatSig.c,v 1.5 88/10/21 17:57:05 ouster Exp Locker: douglis $ SPRITE (Berkeley)";
  310. d25 1
  311. a25 88
  312. /*
  313.  * Define the mapping between Unix and Sprite signals. There are two arrays,
  314.  * one to go from Unix to Sprite and one to go from Sprite to Unix.
  315.  *
  316.  * Note that the signals SIGIOT and SIGEMT that people don't usually
  317.  * send from the keyboard and that tend not to be delivered by the
  318.  * kernel but, rather, are used for IPC have been mapped to user-defined
  319.  * signal numbers, rather than a standard Sprite signal. This allows more
  320.  * of a one-to-one mapping.
  321.  */
  322.  
  323. /*
  324.  * Map Unix signals to Sprite signals.
  325.  */
  326. int compat_UnixSigToSprite[] = {
  327.             NULL,
  328.      /* SIGHUP */    SIG_INTERRUPT,
  329.      /* SIGINT */    SIG_INTERRUPT,
  330.      /* SIGDEBUG */    SIG_DEBUG,    
  331.      /* SIGILL */    SIG_ILL_INST,
  332.      /* SIGTRAP */    SIG_DEBUG,
  333.      /* SIGIOT */    28,
  334.      /* SIGEMT */    29,
  335.      /* SIGFPE */    SIG_ARITH_FAULT,
  336.      /* SIGKILL */    SIG_KILL,
  337.      /* SIGMIG */    SIG_MIGRATE_TRAP,
  338.      /* SIGSEGV */    SIG_ADDR_FAULT,
  339.      /* SIGSYS */    NULL,
  340.      /* SIGPIPE */    SIG_PIPE,
  341.      /* SIGALRM */    SIG_TIMER,
  342.      /* SIGTERM */    SIG_TERM,
  343.      /* SIGURG */    SIG_URGENT,
  344.      /* SIGSTOP */    SIG_SUSPEND,
  345.      /* SIGTSTP */    SIG_TTY_SUSPEND,
  346.      /* SIGCONT */    SIG_RESUME,
  347.      /* SIGCHLD */    SIG_CHILD,
  348.      /* SIGTTIN */    SIG_TTY_INPUT,
  349.      /* SIGTTOU */    SIG_TTY_OUTPUT,
  350.      /* SIGIO */    NULL,
  351.      /* SIGXCPU */    NULL,
  352.      /* SIGXFSZ */    NULL,
  353.      /* SIGVTALRM */    NULL,
  354.      /* SIGPROF */    NULL,
  355.      /* SIGWINCH */    NULL,
  356.      /* SIGMIGHOME */    SIG_MIGRATE_HOME,
  357.      /* SIGUSR1 */    30,    /* user-defined signal 1 */
  358.      /* SIGUSR2 */    31,    /* user-defined signal 1 */
  359. };
  360.  
  361. /*
  362.  * Map Sprite signals to Unix signals.
  363.  */
  364. static int spriteToUnix[] = {
  365.                 NULL,
  366.     /* SIG_DEBUG */        SIGDEBUG,
  367.     /* SIG_ARITH_FAULT */    SIGFPE,
  368.     /* SIG_ILL_INST */        SIGILL,
  369.     /* SIG_ADDR_FAULT */    SIGSEGV,
  370.     /* SIG_KILL */        SIGKILL,
  371.     /* SIG_INTERRUPT */        SIGINT,
  372.     /* SIG_BREAKPOINT */    SIGILL,
  373.     /* SIG_TRACE_TRAP */    SIGILL,
  374.     /* SIG_MIGRATE_TRAP */    SIGMIG,
  375.     /* SIG_MIGRATE_HOME */    SIGMIGHOME,
  376.     /* SIG_SUSPEND */        SIGSTOP,
  377.     /* SIG_RESUME */        SIGCONT,
  378.     /* SIG_TTY_INPUT */        SIGTTIN,
  379.     /* SIG_PIPE */        SIGPIPE,
  380.     /* SIG_TIMER */        SIGALRM,
  381.     /* SIG_URGENT */        SIGURG,
  382.     /* SIG_CHILD */        SIGCHLD,
  383.     /* SIG_TERM */        SIGTERM,
  384.     /* SIG_TTY_SUSPEND */    SIGTSTP,
  385.     /* SIG_TTY_OUTPUT */    SIGTTOU,
  386.     /* 21 */            NULL,
  387.     /* 22 */            NULL,
  388.     /* 23 */            NULL,
  389.     /* 24 */            NULL,
  390.     /* 25 */             NULL,
  391.     /* 26 */            NULL,
  392.     /* 27 */            NULL,
  393.     /* 28 */            SIGIOT,
  394.     /* 29 */            SIGEMT,
  395.     /* 30 */            SIGUSR1,
  396.     /* 31 */            SIGUSR2,
  397. };
  398.  
  399. static int numSignals = 31;
  400. @
  401.  
  402.  
  403. 1.5
  404. log
  405. @Added SIGMIG and SIGMIGHOME UNIX signals.
  406. @
  407. text
  408. @d12 1
  409. a12 1
  410. static char rcsid[] = "$Header: compatSig.c,v 1.4 88/08/16 19:08:58 mendel Exp $ SPRITE (Berkeley)";
  411. d62 1
  412. a62 1
  413.      /* SIGTTOU */    NULL,
  414. d98 1
  415. a98 1
  416.     /* 20 */            NULL,
  417. @
  418.  
  419.  
  420. 1.4
  421. log
  422. @Fixed bug in signal hold mask mapping code.
  423. @
  424. text
  425. @d12 1
  426. a12 1
  427. static char rcsid[] = "$Header: compatSig.c,v 1.3 88/07/29 17:39:14 ouster Exp $ SPRITE (Berkeley)";
  428. d43 1
  429. a43 1
  430.      /* SIGQUIT */    SIG_DEBUG,    
  431. d50 1
  432. a50 1
  433.      /* SIGBUS */    SIG_ADDR_FAULT,
  434. d69 1
  435. a69 1
  436.      /* SIGLOST */    NULL,
  437. d79 1
  438. a79 1
  439.     /* SIG_DEBUG */        SIGQUIT,
  440. d87 2
  441. a88 2
  442.     /* SIG_MIGRATE_TRAP */    NULL,
  443.     /* SIG_MIGRATE_HOME */    NULL,
  444. @
  445.  
  446.  
  447. 1.3
  448. log
  449. @Lint.
  450. @
  451. text
  452. @d12 1
  453. a12 1
  454. static char rcsid[] = "$Header: compatSig.c,v 1.2 88/06/21 17:24:49 ouster Exp $ SPRITE (Berkeley)";
  455. d207 1
  456. d254 1
  457. @
  458.  
  459.  
  460. 1.2
  461. log
  462. @Various changes to make code compile under new library.
  463. @
  464. text
  465. @d12 1
  466. a12 1
  467. static char rcsid[] = "$Header: compatSig.c,v 1.1 88/06/19 14:31:12 ouster Exp $ SPRITE (Berkeley)";
  468. d299 1
  469. a299 1
  470.     status = Sig_SetHoldMask(MASK_ALL_SIGNALS, maskPtr);
  471. d303 1
  472. a303 1
  473.     status = Sig_SetHoldMask(*maskPtr, NULL);
  474. @
  475.  
  476.  
  477. 1.1
  478. log
  479. @Initial revision
  480. @
  481. text
  482. @d12 1
  483. a12 1
  484. static char rcsid[] = "$Header: compatSig.c,v 1.7 88/03/22 16:01:34 deboor Exp $ SPRITE (Berkeley)";
  485. d22 2
  486. a23 2
  487. #include "sig.h"
  488. #include "/sprite/att/lib/include/signal.h"
  489. @
  490.